package br.com.fiap.atividade5.dao;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.fiap.atividade5.entity.Cliente;
import br.com.fiap.atividade5.entity.PedidoErro;
import br.com.fiap.atividade5.entity.TipoCliente;

public class PedidoErroDAO extends GenericDAO<PedidoErro> {
	
	private ClienteDAO clienteDAO = new ClienteDAO();

	@Override
	protected PreparedStatement doGetByIdyStatement(Long numeroPedido)
			throws SQLException {

		PreparedStatement st = getConnection().prepareStatement("SELECT * FROM PEDIDO_ERRO WHERE NUMERO_PEDIDO = ?");
		st.setLong(1, numeroPedido);
		
		return st;

	}

	@Override
	protected PreparedStatement doInsertStatement(PedidoErro entity)
			throws SQLException {
		
		try {
			PreparedStatement st = getConnection().prepareStatement("INSERT INTO PEDIDO_ERRO (NUMERO_PEDIDO,DATA,COD_CLIENTE,TIPO_CLIENTE) VALUES (?,?,?,?)");
			
			Date dataSql = new Date(entity.getData().getTime());
			
			st.setLong(1, entity.getNumeroPedido());
			st.setDate(2, dataSql);
			st.setLong(3, entity.getCliente().getCodigo());
			st.setInt(4, entity.getTipoCliente().getCodigo());
			
			return st;
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		
	}

	@Override
	protected PreparedStatement doUpdateStatement(PedidoErro entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected PreparedStatement doDeleteStatement(PedidoErro entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected PedidoErro createEntityByResultSet(ResultSet rs)
			throws SQLException {

		try {
		
			PedidoErro pedido = new PedidoErro();
			
			pedido.setCodigo(rs.getLong("CODIGO"));
			
			Date dataSql = rs.getDate("DATA");
			
			java.util.Date dataPedido = new java.util.Date();
			dataPedido.setTime(dataSql.getTime());
			pedido.setData(dataPedido);
			
			pedido.setNumeroPedido(rs.getLong("NUMERO_PEDIDO"));
			
			Long codigoCliente = rs.getLong("COD_CLIENTE"); 
			Cliente cliente = clienteDAO.searchById(codigoCliente);
			pedido.setCliente(cliente);
			
			pedido.setTipoCliente(TipoCliente.getEnumByKey(rs.getInt("FLAG_PROCESSADO")));
		
			return pedido;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}

}
